<?php
class Productos extends APP_Controller{
    public function __construct() {
        parent::__construct();
        //$this->isValidAjaxRequest();
        $this->load->model('Productos_model','productos');
        $this->setPageSize(12);
    }

    /**
     * Llamada a la pagina principal del modulo de compras
     */
    function index()
    {
        $data = array(
            'idTab'=>$this->input->post('id'),
            'pageSize'=>$this->getPageSize(),
            'title'=>  get_class($this)
        );
        $this->load->view('productos/main',$data);
    }

    /**
     * Llena los combos referentes con el id y desripción de cada producto.
     */
    function llenarCombo()
    {
        $result = array(
            'success'=>true,
            'total' => $this->productos->countAll(),
            'data'  => $this->productos->listAll()
        );
        echo json_encode($result);
    }

    /**
     * Obtiene los productos paginados a la canidad indicada en pagesize
     */
    function paginateList()
    {
        $this->load->helper('date');
        $this->load->helper('format');

        $start = $this->input->post('start');
        $limit = $this->input->post('limit');
        //$sort = json_decode($this->input->post('sort'));

        if(empty ($start)) $start=0;
        if(empty ($limit)) $limit=$this->getPageSize();

        $rs = $this->productos->getPaginateResult($start,$limit);
        $count = $this->productos->countAll();

        $rs = mysql_date_to_vzladate($rs, array('creado','modificado'));

        $paging = array(
            'success'=>true,
            'total'=>$count,
            'data'=> $rs
        );
        echo json_encode($paging);
    }

    /**
     * Hace llado al formulario de de agregar producto
     */
    function form()
    {
        $data = array(
            'gridPanelId'=>$this->input->post('gridPanelId'),
            'pageSize'=>$this->getPageSize(),
            'title'=>  get_class($this)
        );
        $productoId = $this->input->post('productoId');
        if(!empty ($productoId)){
            $this->productos->setId($productoId);
            $data['data'] = $this->productos->getById();
        }
        //$this->pr($data);
        $this->load->view('productos/form',$data);
    }

    /**
     * Guardas los datos enviados desde la vista
     */
    function save()
    {
        $this->load->library('form_validation');

        $rs = array();

        $this->form_validation->set_rules('marca_id', 'Marca', 'required|integer');
        $this->form_validation->set_rules('categoria_id', 'Categoria', 'required|integer');
        $this->form_validation->set_rules('genero_id', 'Genero', 'required|integer');
        $this->form_validation->set_rules('referencia', 'Referencia', 'required|alpha_numeric');
        $this->form_validation->set_rules('descripcion', 'Descripcion', 'required');
        $this->form_validation->set_rules('colores', 'Colores', 'required');

        if($this->form_validation->run()){

            $successMsj = 'Los datos del proveedor fueron almacenados exitosamente.';
            $errorMsj = 'Los datos del proveedor no pudieron ser almacenados. Por Favor intente de nuevo';

            try {
                $this->productos->setMarcaId($this->input->post('marca_id'));
                $this->productos->setCategoriaId($this->input->post('categoria_id'));
                $this->productos->setGeneroId($this->input->post('genero_id'));
                $this->productos->setReferencia($this->input->post('referencia'));
                $this->productos->setDescripcion($this->input->post('descripcion'));
                $this->productos->setColores($this->input->post('colores'));
                $this->productos->setObservaciones($this->input->post('observaciones'));

                $id = $this->input->post('id');
                if(!empty($id)){
                    $this->productos->setId($id);
                    $this->productos->setCreado($this->input->post('creado'));
                    $this->productos->setModificado(date('Y-m-d'));
                    $this->productos->update();
                }else{
                    $this->productos->setCreado(date('Y-m-d'));
                    $this->productos->setModificado(0);
                    $this->productos->add();
                }
                $rs['msg'] = $successMsj;
                $rs['success'] = TRUE;
            } catch (Exception $exc) {
                echo $exc->getTraceAsString();
                $rs['msg'] = $errorMsj;
                $rs['success'] = FALSE;
            }
        }else{
            $this->load->helper('form');
            $rs['msg'] =  validation_errors();
            $rs['success'] = FALSE;
        }
        echo json_encode($rs);
    }
    /**
     * Llamado a la vista precio, que es una ventana dpara agregar los precios a los productos.
     */
    function precio()
    {
        $data = array('gridPanelId'=>$this->input->post('gridPanelId'));
        $productoId = $this->input->post('productoId');
        if(!empty ($productoId)){
            $this->productos->setId($productoId);
            $data['data'] = $this->productos->getById();
        }
        $this->load->view('productos/precio',$data);
    }
    /**
     * Hace llamado al modelo de Precios y almanece el precio del producto
     * Realiza print indicando el resultado de la operación.
     */
    function savePrecio()
    {
        $this->load->library('form_validation');
        $rs = array();

        $this->form_validation->set_rules('precio', 'Precio', 'required');

        if($this->form_validation->run()){
            try {
                $successMsj = 'El precio del producto fue almacenado exitosamente.';

                $this->load->model('Precios_model','precio');
                $this->precio->setProductoId($this->input->post('producto_id'));
                $this->precio->setPrecio($this->input->post('precio'));
                $this->precio->setFecha(date('Y-m-d'));
                $this->precio->add();

                $rs['msg'] = $successMsj;
                $rs['success'] = TRUE;
            } catch (Exception $exc) {
                //echo $exc->getTraceAsString();
                $errorMsj = 'El precio del producto no pudo ser almacenado. Por Favor intente de nuevo';

                $rs['msg'] = $errorMsj;
                $rs['success'] = FALSE;
            }
        }else{
            $this->load->helper('form');
            $rs['msg'] =  validation_errors();
            $rs['success'] = FALSE;
        }
        echo json_encode($rs);
    }
    /**
     * Llama a la vista de imagenes
     */
    function images()
    {
        $this->load->view('productos/images');
    }
    /**
     *
     */
    function addImage()
    {
        $config['upload_path'] =  FCPATH.'assets/uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size']	= '100';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

        $this->load->library('upload', $config);

        if ( ! $this->upload->do_upload())
        {
                $error = array('error' => $this->upload->display_errors());
                echo "Error.....\n";
                $this->pr($error);
                //$this->load->view('upload_form', $error);
        }
        else
        {
                $data = array('upload_data' => $this->upload->data());
                echo "exito";
                //$this->load->view('upload_success', $data);
        }
    }
}
?>